#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        //从右向左先找到第一个小于右侧相邻数字的位置
        //从右向左找比这个位置大的第一个数的位置
        //交换这两个值
        //反转
        int i=nums.size()-2;
        while(i>=0&&nums[i]>=nums[i+1])i--;
        if(i>=0)
        {
            int j=nums.size()-1;
            while(j>=0&&nums[i]>=nums[j])j--;
            swap(nums[i],nums[j]);
        }
        //i小于0说明此序列是完全降序的，需要返回最小的字典序的排列；整体做一个反转
        reverse(nums.begin()+i+1,nums.end());
    }
};
int main()
{
    vector<int> ll{6,7,5,3,56,2,9,1,2,7,0,9};
    Solution().nextPermutation(ll);
    return 0;
}